package com.niodata.dp.monitor.components.task.dao;

import com.niodata.dp.monitor.sharelib.entity.monitor.task.TaskExecDayStatistic;
import com.niodata.dp.monitor.sharelib.entity.monitor.task.TaskExecFailedStatistic;
import com.niodata.dp.monitor.sharelib.entity.monitor.task.TaskExecHourStatistic;
import com.niodata.dp.monitor.sharelib.entity.monitor.task.TaskFailedObj;
import com.niodata.dp.monitor.sharelib.entity.monitor.task.TaskStaticObj;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.ResultMap;


@Mapper
public interface TaskExecStatisticMapper {

  public Map<String, Integer> getTaskExecutionCount(
        @Param("ownerId") long ownerId, @Param("ids") List<Long> ids,
        @Param("startTime") String startTime, @Param("endTime") String endTime);

  public List<TaskStaticObj> getHourTaskCount(
        @Param("ownerId") long ownerId, @Param("ids") List<Long> ids,
        @Param("startTime") String startTime, @Param("endTime") String endTime);

  @ResultMap("taskStaticResultMap")
  public List<TaskStaticObj> getWeekTaskCount(
        @Param("ownerId") long ownerId, @Param("ids") List<Long> ids,
        @Param("startTime") String startTime, @Param("endTime") String endTime);

  /**
   * 按天，OWNER_ID,OWNER_TYPE分组查询task_execution表 .
   *
   * @param startTime 大于startTime
   * @param endTime 小于等于endTime
   * @return list
   */
  @ResultMap("taskExecDayCountResultMap")
  public List<TaskExecDayStatistic> getExecDayCount(
        @Param("startTime") Date startTime, @Param("endTime") Date endTime);

  /**
   * 按小时，OWNER_ID,OWNER_TYPE分组查询task_execution表 .
   *
   * @param startTime 大于startTime
   * @param endTime 小于等于endTime
   * @return list
   */
  @ResultMap("taskExecHourCountResultMap")
  public List<TaskExecHourStatistic> getExecHourCount(
        @Param("startTime") Date startTime, @Param("endTime") Date endTime);

  /**
   * 统计每小时的执行失败任务 .
   */
  @ResultMap("taskExecFailedStatisticResultMap")
  public List<TaskExecFailedStatistic> getExecFailedCount(
        @Param("startTime") Date startTime,
        @Param("endTime") Date endTime);

  @ResultMap("taskExecFailedResultMap")
  public List<TaskFailedObj> getFailedCount(
        @Param("ownerId") long ownerId, @Param("ids") List<Long> ids,
        @Param("startTime") String startTime, @Param("endTime") String endTime,
        @Param("format") String format);
}
